package com.zhongge.pascaltriangles;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName Test
 * @Description TODO 杨辉三角
 * @Author zhongge
 * @Version 1.0
 */
@SuppressWarnings("all")
public class Test {
    public static List<List<Integer>> generate(int numRows) {
        //创建二维集合
        List<List<Integer>> ret = new ArrayList<>();

        //处理第一行
        //创建一维集合
        List<Integer> tmpArr = new ArrayList<>();
        //第一行就只有一个元素
        tmpArr.add(1);
        //将一维集合放入到二维集合中
        ret.add(tmpArr);

        //处理非第一行的从1开始
        for (int i = 1; i < numRows; i++) {
            //创建非第一行的一维集合
            List<Integer> tmp = new ArrayList<>();
            //第一个元素
            tmp.add(1);

            //中间元素
            //得到二维集合中的当前集合的上个一维集合
            List<Integer> last = ret.get(i - 1);
            for (int j = 1; j < i; j++) {//根据i<numRows可知：i最终到达的是最后一个元素,所以这里j<i就代表j最终到达的是倒数第二个
//                //得到二维集合中的当前集合的上个一维集合
//                List<Integer> last = ret.get(j - 1); “写在这里是错的，应为这样的话，你始终得到的都是前几个固定的集合”
                tmp.add(last.get(j - 1) + last.get(j));
            }
            //最后一个元素
            tmp.add(1);

            //最后价格这个一维集合加入到二维集合中
            ret.add(tmp);
        }
        return ret;
    }

    public static void main(String[] args) {
        List<List<Integer>> lists = generate(5);
        System.out.println(lists);
    }
}
